/**
 * 获取元素节点
 * @param selector 元素class或id，比如：'.fan-button'、'#fanButton'
 * @param opt { selectAll: 是否全选, scope: selector范围（比如组件内传this，兼容uniapp必传） }
 */
export function getElementNodes(selector, opt) {
    const { selectAll = false, scope } = opt || {};
    let query = uni.createSelectorQuery().in(scope);
    return selectAll ? query.selectAll(selector) : query.select(selector);
}
/**
 * 获取元素尺寸信息
 * @param opt {
 *   el: 元素节点NodesRef（与selector传其一）,
 *   selector: 元素class或id,
 *   selectAll: 是否全选（selector时）,
 *   scope: selector范围（比如组件内传this，因uniapp所以必传）
 * }
 */
export function getElementBounding(opt) {
    return new Promise((resolve) => {
        const { el, selector, selectAll = false, scope } = opt || {};
        if (el) {
            el.boundingClientRect(resolve).exec();
            return;
        }
        getElementNodes(selector, { scope, selectAll })
            .boundingClientRect(resolve)
            .exec();
    });
}
/**
 * 获取子组件集合（只获取最近一层，套娃的不要）
 * @param scope 父组件实例
 * @param name 要获取的子组件 name，默认获取全部
 * @returns 子组件实例的集合，注意该子组件实例上的属性在H5、小程序不尽一样，目前看来只有 Vue 基本属性（props、setup返回的）是通用的
 */
export function getChildrenComponents(scope, name) {
    let result = scope.proxy.$children || [];
    if (name)
        result = result.filter((a) => a.$options.name === name);
    return result;
}
